home *** CD-ROM | disk | FTP | other *** search
/ PC Player 2004 May / pc player 2004-05.iso / Demos / FarCry / Data1.cab / _9E69D1F9ABC9484C96AECE73F33F2CE6 < prev    next >
Encoding:
Text File  |  2004-01-06  |  8.7 KB  |  301 lines

  1. ; Shaders Script file
  2. ; Copyright (c) 2001-2003 Crytek Studios. All Rights Reserved.
  3. ; Author: Honich Andrey
  4.  
  5. Version (1.00)
  6.  
  7. //=========================================================================
  8. // Input binding:
  9. //
  10. // ATTR0: Vertex
  11. // ATTR1: 
  12. // ATTR2: Normal
  13. // ATTR3: Color
  14. // ATTR4: Color1
  15. // ATTR5: FOGCOORD
  16. // ATTR8: TexCoord0
  17. // ATTR9: TexCoord1
  18. // ATTR10: TexCoord2
  19. // ATTR11: TexCoord3
  20. // ATTR12: TexCoord4
  21. // ATTR13: TexCoord5
  22. // ATTR14: Tangent
  23. // ATTR15: Binormal
  24. //=========================================================================
  25.  
  26.  
  27. //=========================================================================
  28. //Output registers:
  29. //
  30. // HPOS: Output vertex position
  31. // COL0: Primary color.
  32. // COL1: Secondary color.
  33. // TEX0: Tex. coords 0
  34. // TEX1: Tex. coords 1
  35. // TEX2: Tex. coords 2
  36. // TEX3: Tex. coords 3
  37. //=========================================================================
  38.  
  39. #include "CGVPMacro.csi"
  40.  
  41. Shader 'CGVProgramms'
  42. (
  43.   HW
  44.   (
  45.     DeclareCGScript 'PosCommon'
  46.     {
  47.       float4 vPos = IN.Position;
  48.       OUT.HPosition = mul(ModelViewProj, vPos);
  49.     }
  50.  
  51.     DeclareCGScript 'PosBending'
  52.     {
  53.       float4 vPos = IN.Position;
  54.  
  55.       // Bend factor
  56.       float fBF = max(vPos.z, 0) * Bend.z + Bend.w;
  57.       fBF = fBF * fBF;
  58.       fBF = fBF * fBF - Bend.w;
  59.  
  60.       float4 vP;
  61.       vP.xy = Bend.xy * fBF;
  62.  
  63.       float fLength = length(vPos.xyz);
  64.  
  65.       vPos.xy = vPos.xy + vP.xy;
  66.       float3 vDirect = normalize(vPos.xyz);
  67.       vPos.xyz = vDirect * fLength;
  68.  
  69.       OUT.HPosition = mul(ModelViewProj, vPos);
  70.     }
  71.  
  72.     DeclareCGScript 'PosBending_Merged'
  73.     {
  74.       float4 vPos = IN.Position;
  75.       vPos.xyz = vPos.xyz - IN.Tex1.xyz;
  76.  
  77.       // Bend factor
  78.       float fBF = max(vPos.z, 0) * IN.Color.z + vPos.w;
  79.       fBF = fBF * fBF;
  80.       fBF = fBF * fBF - vPos.w;
  81.  
  82.       float4 vP;
  83.       vP.xy = IN.Color1.xy * fBF;
  84.  
  85.       float fLength = length(vPos.xyz);
  86.  
  87.       vPos.xy = vPos.xy + vP.xy;
  88.       float3 vDirect = normalize(vPos.xyz);
  89.       vPos.xyz = vDirect * fLength;
  90.  
  91.       OUT.HPosition = mul(ModelViewProj, vPos);
  92.     }
  93.  
  94.     DeclareCGScript 'PosBending_Sprite'
  95.     {
  96.       float4 vPos = IN.Position - ObjPos;
  97.  
  98.       // Bend factor
  99.       float fBF = max(vPos.z, 0) * Bend.z + Bend.w;
  100.       fBF = fBF * fBF;
  101.       fBF = fBF * fBF - Bend.w;
  102.  
  103.       float4 vP;
  104.       vP.xy = Bend.xy * fBF;
  105.  
  106.       float fLength = length(vPos.xyz);
  107.  
  108.       vPos.xy = vPos.xy + vP.xy;
  109.       float3 vDirect = normalize(vPos.xyz);
  110.       vPos.xyz = vDirect * fLength;
  111.  
  112.       vPos = vPos + ObjPos;
  113.       OUT.HPosition = mul(ModelViewProj, vPos);
  114.     }
  115.  
  116.     DeclareCGScript 'PosBending_DetailObject'
  117.     {
  118.       float4 vPos = IN.Position;                         
  119.                                     
  120.       float4 Bend;
  121.       Bend.w = IN.Position.w;
  122.       Bend.z = 0.01; //IN.Color.w;
  123.       sincos(Time.x+vPos.x*0.1+vPos.y*0.3, Bend.x, Bend.y);
  124.                                                                                         
  125.       // Bend factor                                     
  126.       float fBF = max(vPos.z, 0) * Bend.z + Bend.w;      
  127.       fBF = fBF * fBF;                                   
  128.       fBF = fBF * fBF - Bend.w;                          
  129.                                                           
  130.       float4 vP;                                         
  131.       vP.xy = Bend.xy * fBF;                             
  132.                                                           
  133.       float fLength = length(vPos.xyz);                  
  134.                                                           
  135.       vPos.xy = vPos.xy + vP.xy;                         
  136.       float3 vDirect = normalize(vPos.xyz);              
  137.       vPos.xyz = vDirect * fLength;
  138.       
  139.       OUT.HPosition = mul(ModelViewProj, vPos);
  140.     }
  141.     
  142.     DeclareCGScript 'PosBeam'
  143.     {
  144.       float4 vPos = IN.Position;
  145.       float4 vNormal = normalize(IN.Normal);
  146.       float fiOrigLength = 1/GeomConstants.x;
  147.       
  148.       // fLerp = vrt->x/OrigLength
  149.       float fLerp = vPos.x * fiOrigLength;
  150.       
  151.       // Pos.x = fLerp * Length
  152.       vPos.x = fLerp * CameraPos.w;
  153.  
  154.       // fCurRadius = Lerp(StartRadius, EndRadius, fLerp)
  155.       float fCurRadius = lerp(GeomConstants.z, GeomConstants.w, fLerp);
  156.       
  157.       float fiOrigWidth = 1/GeomConstants.y;
  158.       vPos.yz = vPos.yz * fiOrigWidth * fCurRadius;
  159.  
  160.       OUT.HPosition = mul(ModelViewProj, vPos);
  161.     }
  162.     
  163.     DeclareCGScript 'PosSilhouete'
  164.     {
  165.       float3 vNormal = normalize(IN.Normal.xyz);
  166.       float4 vPos;
  167.       vPos.xyz = IN.Position.xyz + vNormal.xyz * Constants.x;
  168.       vPos.w = IN.Position.w;
  169.  
  170.       OUT.HPosition = mul(ModelViewProj, vPos);
  171.     }
  172.     
  173.     DeclareCGScript 'PosTerrainOverlay'
  174.     {
  175.       float3 normal = IN.Color.xyz * (2).xxx - IN.Position.www;
  176.       
  177.       float4 vPos;
  178.       vPos.xyz = IN.Position.xyz + normal * (0.05).xxx;
  179.       vPos.w = IN.Position.w;
  180.       OUT.HPosition = mul(ModelViewProj, vPos);
  181.     }
  182.  
  183.     DeclareCGScript 'PosFur'
  184.     {
  185.       // compute final vert pos = (norm*offset + vert)
  186.       float4 vPos;
  187.       vPos.xyz = IN.Position.xyz + IN.Normal.xyz * Modifiers.x;
  188.       vPos.w = IN.Position.w;
  189.       OUT.HPosition = mul(ModelViewProj, vPos);
  190.     }
  191.     
  192.     DeclareCGScript 'PosWaterDeform'
  193.     {
  194.       float2 v = IN.Position.xy + NoisePos.xy;
  195.       
  196.       // 2D version of perlin noise
  197.       float2 i = frac(v * 0.03125) * 32;   // index between 0 and B-1
  198.       float2 f = frac(v);                  // fractional position
  199.  
  200.       // lookup in permutation table
  201.       float2 p;
  202.       p[0] = pg[ i[0]   ].w;
  203.       p[1] = pg[ i[0]+1 ].w;
  204.       p = p + i[1];
  205.  
  206.       // compute dot products between gradients and vectors
  207.       float4 r;
  208.       r[0] = dot( pg[ p[0] ].xy,   f);
  209.       r[1] = dot( pg[ p[1] ].xy,   f - float2(1.0f, 0.0f) );
  210.       r[2] = dot( pg[ p[0]+1 ].xy, f - float2(0.0f, 1.0f) );
  211.       r[3] = dot( pg[ p[1]+1 ].xy, f - float2(1.0f, 1.0f) );
  212.  
  213.       // interpolate
  214.       f = f*f*( float2(3.0f, 3.0f) - float2(2.0f, 2.0f)*f);
  215.       r = lerp( r.xyyy, r.zwww, f[1] );
  216.       float fNoise = lerp( r.x, r.y, f[0] );
  217.  
  218.       float4 vPos = IN.Position;
  219.       vPos.z = vPos.z + fNoise * NoisePos.w;
  220.  
  221.       OUT.HPosition = mul(ModelViewProj, vPos);
  222.     }
  223.  
  224.     DeclareCGScript 'PosWaterDeform_TNorm'
  225.     {
  226.       float2 v = IN.Position.xy + NoisePos.xy;
  227.       
  228.       // 2D version of perlin noise
  229.       float2 i = frac(v * 0.03125) * 32;   // index between 0 and B-1
  230.       float2 f = frac(v);                  // fractional position
  231.  
  232.       // lookup in permutation table
  233.       float2 p;
  234.       p[0] = pg[ i[0]   ].w;
  235.       p[1] = pg[ i[0]+1 ].w;
  236.       p = p + i[1];
  237.  
  238.       // compute dot products between gradients and vectors
  239.       float4 r;
  240.       r[0] = dot( pg[ p[0] ].xy,   f);
  241.       r[1] = dot( pg[ p[1] ].xy,   f - float2(1.0f, 0.0f) );
  242.       r[2] = dot( pg[ p[0]+1 ].xy, f - float2(0.0f, 1.0f) );
  243.       r[3] = dot( pg[ p[1]+1 ].xy, f - float2(1.0f, 1.0f) );
  244.  
  245.       // interpolate
  246.       f = f*f*( float2(3.0f, 3.0f) - float2(2.0f, 2.0f)*f);
  247.       r = lerp( r.xyyy, r.zwww, f[1] );
  248.       float fNoise = lerp( r.x, r.y, f[0] );
  249.  
  250.       float4 vPos = IN.Position;
  251.       vPos.xyz = vPos.xyz + fNoise * NoisePos.w * IN.TNormal.xyz;
  252.  
  253.       OUT.HPosition = mul(ModelViewProj, vPos);
  254.     }
  255.  
  256.     DeclareCGScript 'PosWaterDeform_PlusWaterLevel'
  257.     {
  258.       float2 v = IN.Position.xy + NoisePos.xy;
  259.       
  260.       // 2D version of perlin noise
  261.       float2 i = frac(v * 0.03125) * 32;   // index between 0 and B-1
  262.       float2 f = frac(v);                  // fractional position
  263.  
  264.       // lookup in permutation table
  265.       float2 p;
  266.       p[0] = pg[ i[0]   ].w;
  267.       p[1] = pg[ i[0]+1 ].w;
  268.       p = p + i[1];
  269.  
  270.       // compute dot products between gradients and vectors
  271.       float4 r;
  272.       r[0] = dot( pg[ p[0] ].xy,   f);
  273.       r[1] = dot( pg[ p[1] ].xy,   f - float2(1.0f, 0.0f) );
  274.       r[2] = dot( pg[ p[0]+1 ].xy, f - float2(0.0f, 1.0f) );
  275.       r[3] = dot( pg[ p[1]+1 ].xy, f - float2(1.0f, 1.0f) );
  276.  
  277.       // interpolate
  278.       f = f*f*( float2(3.0f, 3.0f) - float2(2.0f, 2.0f)*f);
  279.       r = lerp( r.xyyy, r.zwww, f[1] );
  280.       float fNoise = lerp( r.x, r.y, f[0] );
  281.  
  282.       float4 vPos = IN.Position;
  283.       //float fDeltaZ = abs(WaterLevel.x - vPos.z);
  284.       //fNoise = fNoise * clamp(fDeltaZ * WaterLevel.z, 0, vPos.w);
  285.       //float fWaterAmplitude = (vPos.z < WaterLevel.x) ? 0 : NoisePos.w;
  286.       vPos.z = WaterLevel.x + fNoise * NoisePos.w;
  287.  
  288.       OUT.HPosition = mul(ModelViewProj, vPos);
  289.     }
  290.  
  291.     DeclareCGScript 'PosCommon_PlusWaterLevel'
  292.     {
  293.       float4 vPos = IN.Position;
  294.       vPos.z = WaterLevel.x;
  295.  
  296.       OUT.HPosition = mul(ModelViewProj, vPos);
  297.     }
  298.   )
  299. )
  300.  
  301.